package com.dinetech.ejecutor;

import java.util.ArrayList;

import com.dinetech.dao.SpinnerVariosAdapter;
import com.dinetech.dao.UbicacionAdapter;
import com.dinetech.dao.WSEvento;
import com.dinetech.entidades.Personal;
import com.dinetech.entidades.Session;
import com.dinetech.entidades.Ubicacion;

import android.os.AsyncTask;
import android.os.Bundle;
import android.support.v4.app.Fragment;
import android.view.Gravity;
import android.view.LayoutInflater;
import android.view.View;
import android.view.ViewGroup;
import android.view.View.OnClickListener;
import android.widget.AdapterView;
import android.widget.Button;
import android.widget.EditText;
import android.widget.LinearLayout;
import android.widget.RadioButton;
import android.widget.RadioGroup;
import android.widget.RadioGroup.OnCheckedChangeListener;
import android.widget.Spinner;
import android.widget.Toast;
import android.widget.AdapterView.OnItemSelectedListener;


public class EventoBaja extends Fragment implements OnClickListener{

	private static final String ID_GALPON="0";
	Spinner cbxIndividual,  cbxMasivoInicio, cbxMasivoFin, cbxResponsable;
	EditText txtObs;
	RadioButton rbtI, rbtM, rbtT;
	RadioGroup rdg;
	Button btnGrabarB;
	LinearLayout lI, lM;
	Personal perB = Personal.getInstance();
	int idUsuario, idUbicInicio, idUbicFin, tipoBaja, idGalpon;
	
	Session ses= Session.getInstance();
	
	public static EventoBaja newInstance (int IdGalpon){
		
		EventoBaja eventoB = new EventoBaja();
		
		Bundle bundle = new Bundle();
		bundle.putInt(ID_GALPON, IdGalpon);
		eventoB.setArguments(bundle);
		eventoB.setRetainInstance(true);
		
		return eventoB;
	}
		
	@Override
	public void onActivityCreated(Bundle savedInstanceState) {
		super.onActivityCreated(savedInstanceState);

	}

	@Override
	public View onCreateView(LayoutInflater inflater, ViewGroup container,
			Bundle savedInstanceState) {
		
		ViewGroup view = (ViewGroup)inflater.inflate(R.layout.evento_baja,container, false);
		
		rdg = (RadioGroup) view.findViewById(R.id.radioGroup1);
		rdg.setOnCheckedChangeListener(new RadioGroupCheckedChange());
		rbtI = (RadioButton)view.findViewById(R.id.rbtIndividual);		
		rbtM = (RadioButton)view.findViewById(R.id.rbtMasivo);
		rbtT = (RadioButton)view.findViewById(R.id.rbtTotal);
		lI = (LinearLayout)view.findViewById(R.id.linearBajaI);
		lM = (LinearLayout)view.findViewById(R.id.linearBajaM);
		cbxIndividual = (Spinner)view.findViewById(R.id.spinnerBajaIndividual);
		cbxMasivoInicio = (Spinner)view.findViewById(R.id.spinnerBajaMInicio);
		cbxMasivoFin = (Spinner)view.findViewById(R.id.spinnerBajaMFin);
		cbxResponsable = (Spinner)view.findViewById(R.id.spinnerRspBaja);
		txtObs = (EditText)view.findViewById(R.id.txtComentarioB);		
		btnGrabarB = (Button)view.findViewById(R.id.btnGrabarBaja);
		btnGrabarB.setOnClickListener(this);		
		this.idGalpon = getArguments().getInt(ID_GALPON);
		
		llenarSpinner();	

		return view;
	}

	private void refrescarBaja(){
		rbtI.setChecked(false);
		rbtM.setChecked(false);
		rbtT.setChecked(false);		
		llenarSpinner();
		txtObs.setText("");
		
	}
	
	private void llenarSpinner(){

		SpinnerVariosAdapter adaptadorRespB = new SpinnerVariosAdapter(EventoBaja.this, ses.getLISTA_RESPONSABLE());
		cbxResponsable.setAdapter(adaptadorRespB);
		cbxResponsable.setOnItemSelectedListener(new SpinnerListenerResp());
		
		for(int i=0; i <  adaptadorRespB.getCount(); i++){
			int idRA=(int)(long)adaptadorRespB.getItemId(i) ;
			idUsuario = perB.getIdPersonal();
			if( idRA == idUsuario){
				cbxResponsable.setSelection(i);					
			}	        
		}
		
	}
	
	public class RadioGroupCheckedChange implements OnCheckedChangeListener{

		@Override
		public void onCheckedChanged(RadioGroup group, int checkedId) {
			switch (checkedId) {
			case R.id.rbtIndividual:
				lI.setVisibility(View.VISIBLE);
				lM.setVisibility(View.INVISIBLE);
				rbtM.setChecked(false);
				rbtT.setChecked(false);
				tipoBaja = 0;
				new listarUbicacion().execute();
				break;
			case R.id.rbtMasivo:
				lM.setVisibility(View.VISIBLE);
				lI.setVisibility(View.INVISIBLE);
				rbtI.setChecked(false);
				rbtT.setChecked(false);
				tipoBaja = 1;
				new listarUbicacion().execute();
				break;
			
			case R.id.rbtTotal:
				lM.setVisibility(View.INVISIBLE);
				lI.setVisibility(View.INVISIBLE);
				rbtM.setChecked(false);
				rbtI.setChecked(false);
				tipoBaja = 2;
				break;

			default:
				break;
			}
			
		}
		
	}
	
	public class SpinnerListenerIndividual implements OnItemSelectedListener {
	      
        public void onItemSelected(AdapterView<?> parent,
            View view, int pos, long id) {
        
            int convert=Integer.parseInt( Long.toString(id));
            idUbicInicio= convert;	     
            
            new listarUbicacionFinal().execute(idUbicInicio);
        }

		@Override
		public void onNothingSelected(AdapterView<?> arg0) {
			
			
		}
	}
	
	public class SpinnerListenerMasivoFin implements OnItemSelectedListener {
	      
        public void onItemSelected(AdapterView<?> parent,
            View view, int pos, long id) {
        
            int convert=Integer.parseInt( Long.toString(id));
            idUbicFin= convert;	                                   
        }

		@Override
		public void onNothingSelected(AdapterView<?> arg0) {
			
			
		}
	}
	
	public class SpinnerListenerResp implements OnItemSelectedListener {
	      
        public void onItemSelected(AdapterView<?> parent,
            View view, int pos, long id) {
        
            int convert=Integer.parseInt( Long.toString(id));
            idUsuario= convert;	            	         
        }

		@Override
		public void onNothingSelected(AdapterView<?> arg0) {
			
			
		}
	}
	
	private class listarUbicacion extends AsyncTask<String, Void, ArrayList<Ubicacion>>{

		@Override
		protected ArrayList<Ubicacion> doInBackground(String... params) {
			ArrayList<Ubicacion> listaUbicacion;
			WSEvento wsE = new WSEvento();
			
			
			listaUbicacion = wsE.ubicacionPorEvento("07", idGalpon, 0, 0, 1, 0, perB.getIdSucursal());
			
			return listaUbicacion;
		}

		@Override
		protected void onPostExecute(ArrayList<Ubicacion> result) {
			super.onPostExecute(result);
			
			if(rbtI.isChecked()){
				
				UbicacionAdapter adaptadorUbic = new UbicacionAdapter(EventoBaja.this, result);
				cbxIndividual.setAdapter(adaptadorUbic);
				cbxIndividual.setOnItemSelectedListener(new SpinnerListenerIndividual());
				
			}else if(rbtM.isChecked()){
				
				UbicacionAdapter adaptadorUbicM = new UbicacionAdapter(EventoBaja.this, result);
				cbxMasivoInicio.setAdapter(adaptadorUbicM);
				cbxMasivoInicio.setOnItemSelectedListener(new SpinnerListenerIndividual());
			}
			
			
			
		}
		
	}
	
	private class listarUbicacionFinal extends AsyncTask<Integer, Void, ArrayList<Ubicacion>>{

		@Override
		protected ArrayList<Ubicacion> doInBackground(Integer... params) {
			ArrayList<Ubicacion> listaUbicacion;
			WSEvento wsE = new WSEvento();
			
			
			listaUbicacion = wsE.ubicacionPorEvento("07", idGalpon, 0, 0, 1, params[0], perB.getIdSucursal());
			
			return listaUbicacion;
		}

		@Override
		protected void onPostExecute(ArrayList<Ubicacion> result) {
			super.onPostExecute(result);

				UbicacionAdapter adaptadorUbicFin = new UbicacionAdapter(EventoBaja.this, result);
				cbxMasivoFin.setAdapter(adaptadorUbicFin);
				cbxMasivoFin.setOnItemSelectedListener(new SpinnerListenerMasivoFin());

			
		}
		
	}
	
	private class grabarBaja extends AsyncTask<String, Void, String>{
		
		
		@Override
	    protected String doInBackground(String... urls) {

	    	WSEvento we= new WSEvento();
	    	
	    	String Msg = we.bajaDeUbicacion(tipoBaja, idUbicInicio, idUbicFin, idGalpon, perB.getIdSucursal(), txtObs.getText().toString());
	    	we.grabarEvento("01", "07", "0", "0", ses.obtenerFechaActual(), "0", "0", 0, 0, 0, "0", "0", "0", "0", 0, txtObs.getText().toString(), idUsuario, ses.obtenerFechaActual2(), perB.getIdPersonal(), 0, "0", perB.getIdSucursal(), idGalpon,0,0);
	    	return Msg;
	        	
	    }

	    @Override
	    protected void onPostExecute(String resultadoWS) {
	        super.onPostExecute(resultadoWS);	
	         
	        Toast msg = Toast.makeText(getActivity(), resultadoWS , Toast.LENGTH_LONG);
	        msg.setGravity(Gravity.CENTER_VERTICAL, 0, 0);
	        msg.show();
	        refrescarBaja();
	        
	    }
	}

	@Override
	public void onClick(View v) {
		
		if(rbtI.isChecked() || rbtM.isChecked() || rbtT.isChecked()){
			new grabarBaja().execute();
		}
		else{
			Toast msg = Toast.makeText(getActivity(), "Seleccionar un tipo de baja", Toast.LENGTH_LONG);
			msg.setGravity(Gravity.CENTER_VERTICAL, 0, 0);
	        msg.show();
		}
			
		
	}


}
